/**
 * Created by no1 on 2015/7/24.
 */

'use strict';

let Base = require('./Base');
let DD = require('./daoLoader');
let F = require('../function');
var util = require("util");

let mysqlWikiDao = new DD.mysqlDB.WikiDao();

function WikiDispatcher(data) {
  data = data || {};
  data.dao = data.dao || mysqlWikiDao;
  data.esDao = data.esDao || {};
  data.redisDao = data.redisDao || {};
  data.modelName = data.modelName || 'wiki';
  data.modelType = data.modelType || 'mysql';
  this.data = data;
  Base.call(this, this.data);
}
util.inherits(WikiDispatcher, Base);

let rp = WikiDispatcher.prototype;

/**
 *@todo 添加
 *@param  {Object}  fields  所有参数
 */
rp.add = function*(fields) {
  if (!fields.type) return F.returnData(1, '必须添加type');
  if (!fields.pageName) return F.returnData(1, '名字必须填写');
  if (!fields.content) return F.returnData(1, '内容必须填写');
  let parameters = {};
  parameters.pageName = fields.pageName;
  parameters.content = JSON.stringify(fields.content);
  parameters.status = 1;

  if (!!fields.idFromType) parameters.idFromType = fields.idFromType;
  //保存数据
  let ret = yield this.dao.save(parameters);

  if (ret.error == 1) return F.returnData(1, ret.msg, ret.data);

  return F.returnData(0, ret.msg, ret.data);
};

/**
 @todo 更新
 */
rp.update = function*(fields) {
  if (!fields.id) return F.returnData(1, '必须有id');
  let parameters = {};
  if (!!fields.pageName) parameters.pageName = fields.pageName;
  if (!!fields.content) parameters.content = JSON.stringify(fields.content);
  if (!!fields.idFromType) parameters.idFromType = fields.idFromType;
  if (!!fields.status) parameters.status = fields.status;

  let opt = {};
  opt.id = fields.id;

  //更新订单信息
  let ret = yield this.dao.update(parameters, opt);
  if (ret.error == 1) return F.returnData(1, ret.msg, ret.data);

  return F.returnData(0, ret.msg, ret.data);
};

/**
 @todo list
 */
rp.list = function*(fields) {
  if (!fields.type) return F.returnData(1, '必须添加类别');
  let parameters = {};
  let page = fields.page || 1;
  let pageSize = fields.pageSize || 50;

  parameters.type = fields.type;
  if (fields.status != null) parameters.status = fields.status;
  //获取列表
  let ret = yield this.dao.getByQuery(parameters, page, pageSize, ['id', 'pageName', 'status']);
  if (ret.error == 1) return F.returnData(1, ret.msg, ret.data);
  return F.returnData(0, ret.msg, ret.data);
};

/**
 @todo detail
 */
rp.detail = function*(fields) {
  let parameters = {};
  if (fields.status != null) parameters.status = fields.status;

  if (fields.act == 1) {
    if (!fields.id) return F.returnData(1, '必须有id');
    parameters.id = fields.id;
  } else if (fields.act == 2) {
    if (!fields.type) return F.returnData(1, '必须有type');
    if (!fields.idFromType) return F.returnData(1, '必须有idFromType');
    parameters.type = fields.type;
    parameters.idFromType = fields.idFromType;
  }


  //获取详情
  let ret = yield this.dao.getOneByQuery(parameters);
  if (ret.error == 1) return F.returnData(1, ret.msg, ret.data);
  return F.returnData(0, ret.msg, ret.data);
};

/**
 * @todo 提供查询
 * @param fields 查询的对象
 * @returns {{error, msg, data}|{error, msg}}
 */
rp.findOneForDis = function*(fields) {
  let ret = yield  this.dao.getOneByQuery(fields)
  return F.returnData(0, ret.msg, ret.data);
}

/**
 @todo 查询
 */
rp.rawQuery = function *(sql) {
  let result = yield this.dao.rawQuery(sql);
  return result;
};

module.exports = WikiDispatcher;